#pragma once

///////////////////////////////////////////////////////////////////////////
//																		 //
//	Author:		Michael Mozdzierz										 //
//	Date:		12/12/2014												 //
//	Purpose:	The blend state manager should store all blend states,	 //
//				and expose functionality for applying blend states to	 //
//				the gpu.												 //
//																		 //
///////////////////////////////////////////////////////////////////////////

#include <d3d11.h>

typedef ID3D11BlendState BlendState;

class BlendStateManager
{
	BlendStateManager(void);
	~BlendStateManager(void);
public:
	struct
	{
		BlendState* alphaBlend;
		BlendState* opaque;
		BlendState* additive;
	} blendStates;

	// sends the provided blend state to the graphics device
	void SetBlendState(BlendState* blendState);

	// gets the current blend state on the graphics device
	BlendState* GetBlendState(void) const;

	static BlendStateManager* GetInstance(void)
	{
		static BlendStateManager instance;

		return &instance;
	}
};